#ifndef _PCIE_DEV_H
#define _PCIE_DEV_H

#include <linux/types.h>

#ifndef PCI_STD_NUM_BARS
#define PCI_STD_NUM_BARS    6       /* 标准BAR的数量 */
#endif

#define PCI_DRV_NAME        "pango"

/* PCIe 设备结构体 */
struct pcie_dev_t {
    struct pci_dev *pdev;                               /* PCI 设备结构体 */
    char name[32];                                      /* 设备名称 */
    void __iomem *bar[PCI_STD_NUM_BARS];                /* 映射的BAR数组 */
    resource_size_t bar_len[PCI_STD_NUM_BARS];          /* BAR长度数组 */
    spinlock_t splock;                                  /* 设备访问同步的锁 */

    u32 (*read_mem)(void __iomem *mem);                 /* 读内存 */
    void (*write_mem)(void __iomem *mem, u32 val);      /* 读内存 */
};

int init_pcie_dev(struct pci_dev *pdev, struct pcie_dev_t *pcie_dev);
void exit_pcie_dev(struct pci_dev *pdev, struct pcie_dev_t *pcie_dev);

#endif /* _PCIE_DEV_H */
